package com.love.driver.enums;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public enum DriverInfoTypeEnum {
    // 大型客车
    A1("A1", "大型客车"),
    // 牵引车
    A2("A2", "牵引车"),
    // 城市公交车
    A3("A3", "城市公交车"),
    // 中型客车
    B1("B1", "中型客车"),
    // 大型货车
    B2("B2", "大型货车"),
    // 小型汽车
    C1("C1", "小型汽车"),
    // 小型自动挡汽车
    C2("C2", "小型自动挡汽车"),
    // 低速载货汽车
    C3("C3", "低速载货汽车"),
    // 三轮汽车
    C4("C4", "三轮汽车"),
    // 残疾人专用小型自动挡载客汽车
    C5("C5", "残疾人专用小型自动挡载客汽车"),
    // 普通三轮摩托车
    D("D", "普通三轮摩托车"),
    // 普通二轮摩托车
    E("E", "普通二轮摩托车"),
    // 轻便摩托车
    F("F", "轻便摩托车"),
    // 轮式自行机械车
    M("M", "轮式自行机械车"),
    // 无轨电车
    N("N", "无轨电车"),
    // 有轨电车
    P("P", "有轨电车"),
    // 军队大型客车
    GA1("GA1", "军队大型客车"),
    // 军队牵引车
    GA2("GA2", "军队牵引车"),
    // 军队城市公交车
    GA3("GA3", "军队城市公交车"),
    // 军队中型客车
    GB1("GB1", "军队中型客车"),
    // 军队大型货车
    GB2("GB2", "军队大型货车"),
    // 军队小型汽车
    GC1("GC1", "军队小型汽车"),
    // 军队小型自动挡汽车
    GC2("GC2", "军队小型自动挡汽车"),
    // 军队低速载货汽车
    GC3("GC3", "军队低速载货汽车"),
    // 军队三轮汽车
    GC4("GC4", "军队三轮汽车"),
    // 军队普通三轮摩托车
    GD("GD", "军队普通三轮摩托车"),
    // 军队普通二轮摩托车
    GE("GE", "军队普通二轮摩托车"),
    // 军队轻便摩托车
    GF("GF", "军队轻便摩托车"),
    // 武警大型客车
    WA1("WA1", "武警大型客车"),
    // 武警牵引车
    WA2("WA2", "武警牵引车"),
    // 武警城市公交车
    WA3("WA3", "武警城市公交车"),
    // 武警中型客车
    WB1("WB1", "武警中型客车"),
    // 武警大型货车
    WB2("WB2", "武警大型货车"),
    // 武警小型汽车
    WC1("WC1", "武警小型汽车"),
    // 武警小型自动挡汽车
    WC2("WC2", "武警小型自动挡汽车"),
    // 武警低速载货汽车
    WC3("WC3", "武警低速载货汽车"),
    // 武警三轮汽车
    WC4("WC4", "武警三轮汽车"),
    // 武警普通三轮摩托车
    WD("WD", "武警普通三轮摩托车"),
    // 武警普通二轮摩托车
    WE("WE", "武警普通二轮摩托车"),
    // 武警轻便摩托车
    WF("WF", "武警轻便摩托车");

    private final String value;
    private final String description;

    // 缓存映射，提高查询效率
    private static final Map<String, DriverInfoTypeEnum> VALUE_MAP = new HashMap<>();

    DriverInfoTypeEnum(String value, String description) {
        this.value = value;
        this.description = description;
    }

    public String getValue() {
        return value;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据值获取对应的枚举实例
     * @param value 驾照类型值
     * @return 对应的枚举实例，若不存在则返回null
     */
    public static DriverInfoTypeEnum getValueOf(String value) {
        if (value == null) {
            return null;
        }
        return VALUE_MAP.get(value);
    }

    /**
     * 获取所有驾照类型的列表
     * @return 包含所有驾照类型的Map列表，每个Map包含value和description
     */
    public static List<Map<String, String>> getAllTypes() {
        List<Map<String, String>> list = new ArrayList<>();
        for (DriverInfoTypeEnum type : values()) {
            Map<String, String> map = new HashMap<>();
            map.put("value", type.value);
            map.put("description", type.description);
            list.add(map);
        }
        return list;
    }

    /**
     * 获取所有驾照类型的列表
     * @return 包含所有驾照类型的Map列表，每个Map包含value和description
     */
    public static List<String> getAllValues() {
        List<String> list = new ArrayList<>();
        for (DriverInfoTypeEnum type : values()) {
            list.add(type.value);
        }
        return list;
    }
}